package com.sinotrans.common.util.tree;

import java.util.List;

import com.sinotrans.common.util.Utils;

/**
 * 树节点
 * 
 * @author gaofu
 *
 * @param <T>
 */
public interface TreeNode<T extends TreeNode<T>> {

	/**
	 * 判断是否是主枝干
	 * 
	 * @return
	 */
	default boolean isTrunk() {
		return getParentId() == null;
	}

	/**
	 * 判断本节点是否是node的父节点
	 * 
	 * @param node
	 * @return
	 */
	default boolean isParentOf(T node) {
		if (node != null) {
			return Utils.isEquals(node.getParentId(), this.getId());
		}
		return false;
	}

	/**
	 * 判断本节点是否是node的孩子节点
	 * 
	 * @param node
	 * @return
	 */
	default boolean isChildOf(T node) {
		if (node == null) {
			if (this.getParentId() == null) {
				return true;
			}
		} else {
			return Utils.isEquals(node.getId(), this.getParentId());
		}
		return false;
	}

	/**
	 * 获取父节点id
	 * 
	 * @return
	 */
	public String getParentId();

	/**
	 * 获取本节点id
	 * 
	 * @return
	 */
	public String getId();

	/**
	 * 获取本节点子节点
	 * 
	 * @return
	 */
	public List<T> getChild();

	/**
	 * 设置本节点子节点
	 * 
	 * @param child
	 */
	public void setChild(List<T> child);

}